/**
 * BEM命名规范hooks
 * 提供默认命名空间和相关的BEM命名方法
 */

// 默认命名空间前缀
export const defaultNamespace = 'z';

// 生成BEM命名的方法
const _bem = (namespace, block, element, modifierAttr,modifierValue) =>{
    // block
    let classname = `${namespace}-${block}`
    // element
    element && (classname += `__${element}`)   
    // modifierAttr: 修饰符属性名
    modifierAttr && (classname += `--${modifierAttr}`) 
    // modifierValue: 修饰符属性值
    modifierValue && (classname += `_${modifierValue}`) 

    // 返回BEM命名的类名
    return classname
}

// 命名空间相关方法
export const useNamespace = (block) => {
    const namespace = defaultNamespace
    // block
    const blockName = () => _bem(namespace, block)
    // element
    const elementName = (element) => element ? _bem(namespace, block, element) : '';
    // modifier
    const modifierName = (modifierAttr,modifierValue) => 
        modifierAttr ? _bem(namespace, block, '', modifierAttr, modifierValue) : '';
    // is
    const isName = (name,state) => name && state ? `is-${name}` : ''

    return {
        namespace,
        blockName,
        elementName,
        modifierName,
        isName
    }
}